from flask import Flask, request
from threading import Thread
'''注意，这里的import myapi是另一个py文件，下文会提及'''
import myapi
# import time

app = Flask(__name__)
'''监听端口，获取QQ信息'''

# 以下部分有个bug，由于api调用时间长，所以会导致gocqhttp收不到反馈
# 进而导致反复发post
# @app.route('/', methods=["POST"])
# def post_data():
#     '''下面的request.get_json().get......是用来获取关键字的值用的，关键字参考上面代码段的数据格式'''
#     if request.get_json().get('message_type') == 'private':  # 如果是私聊信息
#         # 获取信息发送者的 QQ号码
#         uid = request.get_json().get('sender').get('user_id')
#         message = request.get_json().get('raw_message')  # 获取原始信息
#         myapi.keyword(message, uid)  # 将 Q号和原始信息传到我们的后台
#     if request.get_json().get('message_type') == 'group':  # 如果是群聊信息
#         gid = request.get_json().get('group_id')  # 获取群号
#         # 获取信息发送者的 QQ号码
#         uid = request.get_json().get('sender').get('user_id')
#         message = request.get_json().get('raw_message')  # 获取原始信息
#         myapi.keyword(message, uid, gid)  # 将 Q号和原始信息传到我们的后台

#     return 'OK'


# 尝试使用多线程解决上述bug
@app.route('/', methods=["POST"])
def post_data():
    '''下面的request.get_json().get......是用来获取关键字的值用的，关键字参考上面代码段的数据格式'''
    if not request:
        print("request donot exit")
        return 0
    if request.get_json().get('message_type') == 'private':  # 如果是私聊信息
        uid = request.get_json().get('sender').get('user_id')  # 获取信息发送者的 QQ号码
        message = request.get_json().get('raw_message')  # 获取原始信息
        thread = Thread(target=myapi.keyword, args=(message, uid))
        thread.start()
    if request.get_json().get('message_type') == 'group':  # 如果是群聊信息
        gid = request.get_json().get('group_id')  # 获取群号
        uid = request.get_json().get('sender').get('user_id')  # 获取信息发送者的 QQ号码
        message = request.get_json().get('raw_message')  # 获取原始信息
        thread = Thread(target=myapi.keyword, args=(message, uid, gid))
        thread.start()

    return 'OK'


if __name__ == '__main__':
    app.run(debug=True, host='127.0.0.1',
            port=5701)  # 此处的 host和 port对应上面 yml文件的设置
